package bots;

import java.io.IOException;

import org.jibble.pircbot.IrcException;
import org.jibble.pircbot.NickAlreadyInUseException;
import org.jibble.pircbot.PircBot;

public class QuoteBot extends PircBot {

	int alle_minuten_ein_zitat;
	int alle_millisekunden_zitat;
	String quelle;
	boolean weiter;
	boolean gestartet;
	Thread starter;
	ibash.Zitat ibash;
	germanbash.Zitat germanbash;
	public QuoteBot(int zitat_senden_alle__minuten, String quelle_nur_germanbash_oder_ibash, String channel, String name){
		alle_minuten_ein_zitat = zitat_senden_alle__minuten;
		alle_millisekunden_zitat = alle_minuten_ein_zitat*60000;
		quelle = quelle_nur_germanbash_oder_ibash;
		weiter = true;
		ibash = new ibash.Zitat();
		germanbash = new germanbash.Zitat();
		
		if(name.equals("leer")){
			setName(name);
		}else{
			setName("QuoteBot");
		}
		try {
			connect("irc.quakenet.org");
		} catch (NickAlreadyInUseException e) {
			
		} catch (IOException e) {
			
		} catch (IrcException e) {
			
		}
		
		joinChannel(channel);
	}

	protected void onJoin(String channel, String sender, String login,
			String hostname) {
		sendMessage(channel, "Hallo, ich bin der QuoteBot, ich wurde von thor77 programmiert!");
	}
	
	protected void onMessage(String channel, String sender, String login,
			String hostname, String message) {
		if(message.startsWith("q->")){
			message = message.replaceFirst("q->", "");
			
			if(message.equalsIgnoreCase("start")){
				starter = new Thread(new zitatschreiber());
				starter.start();
			}
			if(message.equalsIgnoreCase("stop")){
				stop();
			}
			if(message.equalsIgnoreCase("help")){
				sendMessage(channel, "--Hilfe zum QuoteBot--");
				sendMessage(channel, "Verfügbare Befehle: q->start startet das Ausgaben des Zitats alle " + alle_minuten_ein_zitat + " Minuten");
				sendMessage(channel, "q->start stoppt das Ausgeben des Zitats");
				sendMessage(channel, "q->help zeigt diese Hilfe an");
				sendMessage(channel, "--Ende der Hilfe--");
			}
			if(sender.equals("thor77")){
				if(message.startsWith("gehZu")){
					message = message.replaceFirst("gehZu", "");
					sendMessage(channel, "Ich bin jetzt in " + message);
					partChannel(channel);
					joinChannel(message);
				}
				if(message.startsWith("quit")){
					System.exit(0);
				}
				if(message.startsWith("heisse")){
					message = message.replaceFirst("heisse ", "");
					changeNick(message);
				}
			}
			
			
		}
	}
	
	public void start(){
		sendMessage(getChannels()[0], "Ich werde ab jetzt alle " + alle_minuten_ein_zitat + " Minuten ein zufälliges Zitat von " + quelle + " senden!");
		gestartet = true;
		while(weiter==true){
			String[] aufgeteilteszitat_ibash = teilezitatauf(ibash.gibZitat());
			String[] aufgeteilteszitat_germanbash = teilezitatauf(germanbash.gibZitat());
			sendMessage(getChannels()[0], "---------------------");
			if(quelle.equalsIgnoreCase("ibash")){
				for(int i = 0; i<aufgeteilteszitat_ibash.length; i++){
					sendMessage(getChannels()[0], aufgeteilteszitat_ibash[i]);
				}
			}else{
				for(int i = 0; i<aufgeteilteszitat_germanbash.length; i++){
					sendMessage(getChannels()[0], aufgeteilteszitat_germanbash[i]);
				}
			}
			sendMessage(getChannels()[0], "---------------------");
			try {
				Thread.sleep(alle_millisekunden_zitat);
			} catch (InterruptedException e) {}
		}
	}
	
	public String[] teilezitatauf(String zitat){
		String[] aufgeteiltes = new String[100];
		aufgeteiltes = zitat.split("\n");
		for(int i = 0; i<aufgeteiltes.length; i++){
			aufgeteiltes[i] = aufgeteiltes[i].replace("\n", "");
		}
		return aufgeteiltes;
	}
	
	public void stop(){
		if(gestartet==true){
			weiter = false;
			starter.interrupt();
			sendMessage(getChannels()[0], "Zitatausgabe wurde abgebrochen!");
		}
		
	}
	
	private class zitatschreiber implements Runnable{
		public void run() {
			start();
		}
	}
	
}

